package com.adee.java;

import com.adee.util.Utils;

import java.util.UUID;
import java.util.concurrent.*;

public class Test022_1_FutrueTask {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // FutureTask
        FutureTask<String> ft = new FutureTask<>(()->{
            System.out.println("执行FutureTask.Callable任务开始。。。");
            Utils.sleep(3);
            System.out.println("任务执行完毕！");
            return UUID.randomUUID().toString();
        });
        new Thread(ft).start();
        String str = ft.get();
        System.out.println(str);

        // 线程池
        ExecutorService tp = Executors.newCachedThreadPool();
        // execute方法执行Runnable任务，没有返回值
        tp.execute(()->{
            System.out.println("执行Runnable任务开始。。。");
            Utils.sleep(3);
            System.out.println("任务执行完毕！");
        });
        // sumbit方法执行Callable任务，有返回值，立即返回Future，可使用Future异步阻塞获取任务返回值
        Future<String> future = tp.submit(() -> {
            System.out.println("执行Callable任务开始。。。");
            Utils.sleep(3);
            System.out.println("任务执行完毕！");
            return UUID.randomUUID().toString();
        });
        String s = future.get();
        System.out.println(s);


    }
}
